跳到主要内容

Linux 文件监听工具 inotify

使用 fsnotify 包时,发现使用到了 inotify 工具,它老是报错显示 watcher 已经满了,请手动修改 max_user_watches 大小

修改大小

$ echo fs.inotify.max_user_watches=524288 | \
sudo tee -a /etc/sysctl.conf && sudo sysctl -p

如果要查看当前 watches 最大数量

$ sysctl fs.inotify
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192

或者

$ ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Feb 8 14:05 max_queued_events
-rw-r--r-- 1 root root 0 Feb 8 14:05 max_user_instances
-rw-r--r-- 1 root root 0 Feb 8 14:05 max_user_watches

检查当前监听的文件数量

$ find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'

7388

打印进程占用

find /proc/*/fd/ -type l -lname "anon_inode:inotify" -printf "%hinfo/%f\n" | xargs grep -cE "^inotify" | column -t -s:

/proc/10641/fdinfo/24 7
/proc/10641/fdinfo/179 1
/proc/10743/fdinfo/23 2
/proc/11936/fdinfo/698 1
/proc/4551/fdinfo/6 45
/proc/4551/fdinfo/11 1
/proc/4551/fdinfo/14 1
/proc/4565/fdinfo/24 2
/proc/4579/fdinfo/5 2
/proc/4634/fdinfo/3 18
/proc/4657/fdinfo/5 0
/proc/4683/fdinfo/8 0
/proc/4683/fdinfo/57 23

然后用这个观察是哪个进程占用了这些文件

ll /proc/[PID]

References

how to get the number of inotify watches in use